Проект “Средний вес
школьника школы” решили выполнить Мамед и Самед.
Для чего именно им понадобится это число, они не
раскрывают. Они попросили всех учеников школы взвеситься и записали результаты
в таблицу. Ваша задача – помочь им рассчитать средний вес учеников. Однако есть
условие: при расчёте не нужно учитывать учеников с самым большим и самым
маленьким весом.
Стоит отметить, что Мамед и Самед забыли подсчитать
общее количество учеников, но это не станет для вас преградой в выполнении
задачи.
Вход. Веса
учеников заданы в нескольких строках, разделённых пробелами (одним или
несколькими) или символом конца строки. Чтение данных продолжается до конца
ввода.
Выход. Выведите
средний вес учеников школы, исключая учеников с самым большим и самым маленьким
весом. Ответ следует вывести с округлением до целых килограммов.
Пример входа |
Пример выхода |
40 23 27 59 68 23 84
27 53 46 |
46 |
массив
Найдем наименьший min и
наибольший max элемент массива.
Затем вычислим сумму весов всех учеников, исключив тех, у кого вес равен
наименьшему или наибольшему значению. Обозначим эту сумму s, а
количество таких учеников cnt.
Остаётся вычислить средний вес учеников, разделив s
на cnt, и вывести результат, округлённый до целого числа килограммов.
Реализация алгоритма
Объявим
рабочий массив.
int w[1000];
Читаем
входные данные. Количество входных чисел подсчитываем в переменной n.
n = 0;
while (scanf("%d", &w[n]) == 1) n++;
Находим наименьший min и наибольший max элемент массива.
min = max = w[0];
for (i = 0; i < n; i++)
{
if (w[i] > max)
max = w[i];
if (w[i] < min)
min = w[i];
}
Вычисляем сумму весов s и количество учеников cnt,
исключив учеников с наибольшим и наименьшим весом.
s = cnt = 0;
for (i = 0; i < n; i++)
if (w[i] != min
&& w[i] != max)
{
s = s + w[i];
cnt++;
}
Выводим ответ, округленный до целого числа килограммов.
printf("%.0lf\n", 1.0 * s / cnt);
Реализация алгоритма – min_element, max_element
Объявим
рабочий массив.
vector<int> w;
Читаем входные данные.
while (scanf("%d", &x) == 1)
w.push_back(x);
Находим наименьший min_el и наибольший max_el элемент массива.
min_el = *min_element(w.begin(), w.end());
max_el = *max_element(w.begin(), w.end());
Вычисляем сумму весов s и количество учеников cnt,
исключив учеников с наибольшим и наименьшим весом.
s = cnt = 0;
for (int x : w)
if (x != min_el &&
x != max_el)
{
s += x;
cnt++;
}
Выводим ответ, округленный до целого числа килограммов.
printf("%.0lf\n", 1.0 * s / cnt);
Python реализация
import sys
Читаем входные данные.
lst = []
for line in sys.stdin:
lst.extend(map(int,line.split()))
Находим наименьший min_el и наибольший max_el элемент списка.
max_el = max(lst)
min_el = min(lst)
Вычисляем сумму весов s и количество учеников cnt,
исключив учеников с наибольшим и наименьшим весом.
cnt = sum = 0
for x in lst:
if x != max_el and x != min_el:
cnt += 1
sum += x
Вычисляем и выводим ответ, округленный до целого числа килограммов.
res = round(sum / cnt)
print(res)